package io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 * 对象流
 * java.io.ObjectOutputStream和ObjectInputStream
 * 对象流是一对高级流,在流链接中的作用是进行对象的序列化和反序列化
 *
 * 对象序列化:将一个java对象按照其结构转换为一组字节的过程
 * 对象反序列化: 将一组字节还原成为java对象(前提是这组字节是一个对象序列化得到的字节)
 *
 *
 *
 *
 */
public class OOSDemo {
    public static void main(String[] args) throws IOException {
        //将一个Person对象写入文件person.obj
        String name = "cangalso1";
        int age = 18;
        String gender = "meizi1";
        String[] otherInfo = {"shiyigetaichivbuduod1yanyuan","laizidaoguo1","aihaoxiedazi1","qimenglaios"};
        Person p = new Person(name,age,gender,otherInfo);

        System.out.println(p);
        FileOutputStream fos = new FileOutputStream("person.obj");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        /*
            当使用对象输出流将一个对象写出(进行对象序列化)时,该方法要求该对象
            所属的类必须实现可序列化接口(Serializable),否则会抛出异常:
            java.io.NotSerializableException: io.Person
         */
        oos.writeObject(p);
        System.out.println("写出完毕");


        oos.close();
    }
}
